﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;


public class GruposData
{
	private string stringConexion;

	public GruposData(string strConexion)
	{
		stringConexion = strConexion;
	}

	#region Grupos

	public DataSet GetGrupos()
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene los grupos
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetGrupos", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}

	public void AgregarGrupo(DGrupo grupo)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_AgregarGrupo", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id", SqlDbType.VarChar);
			param.Value = grupo.id_nuevo;
			cmd.Parameters.Add(param);

			param = new SqlParameter("@nombre", SqlDbType.VarChar);
			param.Value = grupo.nombre;
			cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

    public void ModificarGrupo(DGrupo grupo)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_ModificarGrupo", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_viejo", SqlDbType.VarChar);
			param.Value = grupo.id_viejo;
			cmd.Parameters.Add(param);

			param = new SqlParameter("@id_nuevo", SqlDbType.VarChar);
			param.Value = grupo.id_nuevo;
			cmd.Parameters.Add(param);

			param = new SqlParameter("@nombre", SqlDbType.VarChar);
			param.Value = grupo.nombre;
			cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

    public void EliminarGrupo(DGrupo grupo)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_EliminarGrupo", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id", SqlDbType.VarChar);
			param.Value = grupo.id_nuevo;
			cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

	#endregion

	#region Usuarios de grupos

	public DataSet GetUsuariosPorGrupo(string id_grupo)
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los Usuarios para el grupo id_grupo
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetUsuariosPorGrupo", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_grupo", SqlDbType.VarChar);
			param.Value = id_grupo;
			adapter.SelectCommand.Parameters.Add(param);

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}

	public DataSet GetNombresUsuarios()
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los nombres de Usuarios
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetNombresUsuarios", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Lleno la variable de resultado para usar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		return resultado;
	}

	public void VincularUsuario(string id_usuario, string id_grupo)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_VincularUsuarioAGrupo", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_usuario", SqlDbType.VarChar);
			param.Value = id_usuario;
			cmd.Parameters.Add(param);

			param = new SqlParameter("@id_grupo", SqlDbType.VarChar);
			param.Value = id_grupo;
			cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

	public void DesvincularUsuario(string id_usuario, string id_grupo)
	{
		try
		{
			//Creo una conexion a la base de datos y la abro
			SqlConnection conexion = new SqlConnection(stringConexion);
			conexion.Open();

			//Creo un objeto SqlCommand en la conexion que acabo de crear para llamar al SP
			SqlCommand cmd = new SqlCommand("sp_DesvincularUsuarioDeGrupo", conexion);
			cmd.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@id_usuario", SqlDbType.VarChar);
			param.Value = id_usuario;
			cmd.Parameters.Add(param);

			param = new SqlParameter("@id_grupo", SqlDbType.VarChar);
			param.Value = id_grupo;
			cmd.Parameters.Add(param);

			//Ejecuto el SP
			cmd.ExecuteNonQuery();

			//Cierro la conexion
			conexion.Close();
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}
	}

	#endregion

    #region General

    public DataSet GetFuentesDatos()
    {
        //Variable usada para retornar el resultado
        DataSet resultado = new DataSet();
        try
        {
            //Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos las fuentes de datos
            SqlDataAdapter adapter = new SqlDataAdapter("sp_GetFuentesDatos", stringConexion);
            adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

            //Lleno la variable de resultado para mostrar en la pagina
            adapter.Fill(resultado);
        }
        catch (Exception ex)
        {
            //Propago la excepcion para poder mostrarla en pantalla
            throw ex;
        }

        return resultado;
    }

    public DataSet GetFormatos()
    {
        //Variable usada para retornar el resultado
        DataSet resultado = new DataSet();
        try
        {
            //Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los formatos
            SqlDataAdapter adapter = new SqlDataAdapter("sp_GetFormatos", stringConexion);
            adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

            //Lleno la variable de resultado para mostrar en la pagina
            adapter.Fill(resultado);
        }
        catch (Exception ex)
        {
            //Propago la excepcion para poder mostrarla en pantalla
            throw ex;
        }

        return resultado;
    }

	public string GetFuenteDatosPorNombre(string nombre)
	{
		//Variable usada para retornar el resultado
		DataSet resultado = new DataSet();
		try
		{
			//Creo un adaptador para conectar a la base de datos y ejecutar el SP que obtiene todos los formatos
			SqlDataAdapter adapter = new SqlDataAdapter("sp_GetFuenteDatosPorNombre", stringConexion);
			adapter.SelectCommand.CommandType = CommandType.StoredProcedure;

			//Agrego los parametros necesarios en el llamado del SP
			SqlParameter param = new SqlParameter("@nombre", SqlDbType.VarChar);
			param.Value = nombre;
			adapter.SelectCommand.Parameters.Add(param);

			//Lleno la variable de resultado para mostrar en la pagina
			adapter.Fill(resultado);
		}
		catch (Exception ex)
		{
			//Propago la excepcion para poder mostrarla en pantalla
			throw ex;
		}

		if(Utiles.TieneDatos(resultado))
			return resultado.Tables[0].Rows[0]["id"].ToString();
		return null;
	}

    #endregion
}
